package noname;

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import model.*;
import view.MediaView;

public class MultimediaControl implements ActionListener, Observer {

    private Container viewContainer;
    private MediaView mediaView;
    private PointOfInterestWatcher watcher;

    public MultimediaControl(Container viewContainer, PointOfInterestWatcher watcher) {
        this.viewContainer = viewContainer;
        this.watcher = watcher;
        this.watcher.attach(this);
        this.mediaView = new MediaView(this);
        this.viewContainer.setLayout(new GridLayout());
        this.viewContainer.add(this.mediaView);
        
        // Roep update handmatig aan zodat de eerste meteen getoond wordt
        this.update();
    }
    
    /**
     * Dit is de implementatie van de Observer interface.
     * Deze update methode wordt aangeroepen door de PointOfInterestWatcher
     * wanneer de huidige point of interest veranderd.
     */
    @Override
    public void update() {
        RouteWaypoint waypoint = watcher.getNextWaypoint();
        PointOfInterest poi = waypoint.getPointOfInterest();
        List<MultiMedia> multiMedia = poi.getMultiMedia();
        
        // De view handeld de multimedia af
        mediaView.displayMultiMedia(multiMedia);
    }

    /**
     * Deze actionlistener wordt aan de mediabuttons toegevoegd.
     * Dus wanneer er op de button geklikt wordt, wordt deze
     * methode aangeroepen.
     * 
     * @param e ActionEvent hier zit de MediaButton in.
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        // Pak het multimedia object dat bij de button hoort
        MediaButton button = (MediaButton)e.getSource();
        MultiMedia multiMedia = button.getMultiMedia();
        
        // Geef het multimedia object aan de view
        mediaView.displayMultiMedia(multiMedia);
    }

}
